package com.example.zlw.dem22;



import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 *
 * @program: Zlw
 * @description:
 * @author: 诸葛龙辰
 * @create: 2022-11-09 20:54
 **/
public class Cyber{
    private  Star star;
   public Cyber(Star star1){
       this.star=star1;
   }
  public Star getStar(){

        /**
         *
         * java中提供了一个代理类---该类可以动态生成代理对象.
        * ClassLoader loader, 被代理类使用的类加载器。
        * Class<?>[] interfaces, 被代理对象实现的接口。
        *  InvocationHandler h: 当代理类调用代理方法时触发的函数。
         */
        ClassLoader classLoader = star.getClass().getClassLoader();
        Class<?>[] interfaces = star.getClass().getInterfaces();
        InvocationHandler h = new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                show();
                Object invoke = method.invoke(star, objects);
                over();
                return invoke;
            }
        };

        Object o = Proxy.newProxyInstance(classLoader, interfaces, h);
        return (Star) o;


    }
    public void show(){
        System.out.println("表演唱跳rap");
        System.out.println("坤哥背带裤中分头");
    }
    public void over(){
        System.out.println("结束");
        System.out.println("谢谢坤哥鸡你太美");
    }
}
